#include "Common/BitOpr.h"
#include "Hardware/Timer.h"
#include "Device/HCSR04.h"
#include "Device/Buzzer.h"

#define SR04_IO P1
#define Trig 6
#define Echo 5

//给超声波模块发送开始信号
void HCSR04_Start()
{
	//给至少10us 的高电平信号
	SetBit(SR04_IO,Trig);
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_();
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_();
	ClrBit(SR04_IO,Trig);
}

float HCSR04_GetDistance()
{
	uint8 _TH0,_TL0;
	HCSR04_Start();
	while(!(GetBit(SR04_IO,Echo))); //等待Echo高电平时开始计时
	StartCountTime();
	while(GetBit(SR04_IO,Echo));    //等待高电平结束
	if(EndCountTime(&_TH0,&_TL0))
	{
		//测试距离=(高电平时间*声速(340M/S))/2;
		//11.0592MHZ,测试距离为4M的极限情况下,TH1=85,TL1=236
		if(_TH0>90)
		{
			return -1.0f;
		}
		else
		{                //算出机器周期   //一个机器周期(微秒)      //换算成秒   //音速/2
			return (  (  (_TH0*256UL+_TL0) * (12.0f/M_XTAL)  )            /1000000.0f  )*170;
		}
	}
	else
	{
		return -1.0f;
	}
}